using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data;

namespace SAD
{
    public class GestorCampana
    {
        static private Conexion conexionBD = new Conexion();

        /* private void AbrirConexion()
        {
            conexionBD.AbrirConexion();
        }*/


        static private string GenerarID()
        {
            String consulta = "SELECT SUBSTRING(MAX(idCampana),4,9) FROM CAMPANA";
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            dataReader.Read();
            string aux = dataReader[0] + "";
            int r;
            if (aux == "") r = 1;
            else r = Convert.ToInt32(aux) + 1;

            string id = r.ToString();
            int nrodig = id.Length;

            for (int i = 1; i <= 9 - nrodig; i++)
                id = "0" + id;
            id = "CMP" + id;
            dataReader.Close();
            return id;
        }

        private static string convertirMoneda(string nombreMoneda)
        {
            String consulta = "SELECT IDMONEDA FROM MONEDA WHERE NOMBRE LIKE '%" + nombreMoneda + "%'";
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            dataReader.Read();

            string aux = dataReader[0] + "";
            dataReader.Close();
            if (aux != "") return aux;
            else return null;

        }

        private static string convertirEstado(string nombreEstado)
        {
            String consulta = "SELECT IDESTADO FROM ESTADOCAMPANA WHERE NOMBRE LIKE '%" + nombreEstado + "%'";
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            dataReader.Read();

            string aux = dataReader[0] + "";
            dataReader.Close();
            if (aux != "") return aux;
            else return null;

        }


        //REGISTRAR UNA CAMPAÑA

        static public void RegistrarCampaña(Campaña campana)
        {
            string nuevoid = GenerarID();
            string consulta = "";

            campana.IdCampana = nuevoid;

            //        private String idCampana;
            //private String nombre;
            //private String descripcion;
            //private String idEmergencia;
            //private String fechaInicio;
            //private String fechaFin;
            //private Single presupuesto;
            //private Single costo;
            //private String idMoneda;
            //private String idEstado;

            consulta = "INSERT INTO CAMPANA (IDCAMPANA, NOMBRE, DESCRIPCION, IDEMERGENCIA, FECHAINICIO, FECHAFIN, PRESUPUESTO, COSTO,                           IDMONEDA, IDESTADO)" +
                        "VALUES ( " + "\'" + @campana.IdCampana + "\'" + "," + "\'" + @campana.Nombre + "\'" + "," + "\'" + @campana.Descripcion + "\'" + "," + "\'" + @campana.IdEmergencia + "\'" + "," + "convert(datetime," + "\'" + @campana.FechaInicio + "\'" + ", 103)," + "convert(datetime," + "\'" + @campana.FechaFin + "\'" + ", 103)," + @campana.Presupuesto + "," + @campana.Costo + "," + "\'" + @campana.IdMoneda + "\'" + "," + "\'" + @campana.IdEstado + "\'" + ")";


            conexionBD.EjecutarComando(consulta);
            MessageBox.Show("Insert exitoso =)", "SAD aviso"); //Decidir sobre messageBox

        }






        static public void EditarCampaña(string idCampana)
        {
            //Editar campaña no recibe otro campo???

            String consulta = "SELECT * FROM CAMPANA WHERE idCampana = " + "\'" + idCampana + "\'" + ";";
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            //update
            /*  consulta = "UPDATE CAMPANA SET codmoneda = " + "\'" + dataReader[1].ToString() + "\'" + ", nombre = " + "\'" + dataReader[2].ToString() + "\'" +
                  ", descripcion= " + "\'" + dataReader[3].ToString() + "\'" + ", fechainicio = " + "convert(datetime," + "\'" + dataReader[4].ToString() + "\'" + ", 103)," +
                  "fechafin = " + "convert(datetime," + "\'" + dataReader[5].ToString() + "\'" + ", 103)," +
                  "costo = " + Convert.ToInt32(dataReader[6].ToString()) + ", estado = " + Convert.ToInt32(dataReader[7].ToString()) + ", codvoluntario =  " + "\'" + 
                  dataReader[8].ToString() + "\'" + "WHERE idCampana =  " + @idCampana + ";";

          */
            consulta = "UPDATE CAMPANA SET codmoneda = " + "\'" + @dataReader[1].ToString() + "\'" + ", nombre = " + "\'" + @dataReader[2].ToString() + "\'" +
                ", descripcion= " + "\'" + @dataReader[3].ToString() + "\'" + ", fechainicio = " + "convert(datetime," + "\'" + @dataReader[4].ToString() + "\'" + ", 103)," +
                "fechafin = " + "convert(datetime," + "\'" + @dataReader[5].ToString() + "\'" + ", 103)," +
                "costo = " + Convert.ToInt32(@dataReader[6].ToString()) + ", estado = " + Convert.ToInt32(@dataReader[7].ToString()) + ", codvoluntario =  " + "\'" +
                @dataReader[8].ToString() + "\'" + "WHERE idCampana =  " + @idCampana + ";";



            conexionBD.EjecutarComando(consulta);
        }


        static public Campaña BuscarCampañaCodigo(string idCampana)
        {
            String consulta = "SELECT * FROM CAMPANA WHERE idCampana = " + "\'" + @idCampana + "\'" + ";";
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            while (dataReader.Read())
            {
                Campaña campana = new Campaña();
                return campana;
            }

            return null;
        }

        static public Campaña BuscarCampañaNombre(string nombre)
        {
            String consulta = "SELECT * FROM CAMPANA WHERE NOMBRE = " + "\'" + @nombre + "\'" + ";";
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            while (dataReader.Read())
            {
                Campaña campana = new Campaña();
                return campana;
            }

            return null;
        }

        /*static public void CambiarEstado(Campaña campana, int estado)
        {
            campana.Estado = estado;
        }*/

        static public void CalcularCostoEstimadoCampaña()
        {
            //Definir que costos implica una campaña
        }

        static public void AsignarVoluntarioXCampaña(string idCampana, string idVoluntario)
        {
            /*  String consulta = "SELECT * FROM CAMPANA WHERE idCampana = " + "\'" + @idCampana + "\'" + ";";
              SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);

            consulta = "Insert into CAMPANA (CODCAMPANA,CODMONEDA,NOMBRE,DESCRIPCION,FECHAINICIO,FECHACIERRE,COSTO,CODVOLUNTARIO) values ('" +
                  dataReader[0].ToString() + "','" + dataReader[1].ToString() + "','" + dataReader[2].ToString() + "','" + dataReader[3].ToString() + "',to_timestamp('" +
                  dataReader[4].ToString() + "','DD-MON-RR HH.MI.SSXFF AM'),to_timestamp('" + dataReader[5].ToString() + "','DD-MON-RR HH.MI.SSXFF AM')," + dataReader[6].ToString()                  +  "','" + dataReader[7].ToString() + "','" + dataReader[8].ToString() + "','" + idVoluntario + "');";
          */
            String consulta2 = "INSERT INTO VOLUNTARIOXCAMPANA (IDCAMPANA,IDVOLUNTARIO)" +
                              "VALUES ( " + "\'" + @idCampana + "\'" + "," + "\'" + @idVoluntario + "\'" + ")";

            conexionBD.EjecutarComando(consulta2);
        }
        static public void CalcularDonacionXCampaña()
        {

        }
        static public void MostrarInfoCampaña()
        {

        }

        static public List<Moneda> ObtenerMonedas()
        {
            List<Moneda> lista = new List<Moneda>();
            Moneda moneda;
            String consulta = "SELECT * FROM MONEDA ";
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);

            if (dataReader.HasRows)
            {
                while (dataReader.Read())
                {
                    moneda = new Moneda(dataReader.GetString(0), dataReader.GetString(1), dataReader.GetString(2));
                    lista.Add(moneda);

                    //lista.Add(dataReader[0].ToString() + " - " + dataReader[1].ToString());
                    //lista.Add(dataReader.GetString(0));
                }
            }

            dataReader.Close();
            return lista;
        }


        static public string ObtenerCodigoMoneda(string nombre)
        {
            String consulta = "SELECT IDMONEDA FROM MONEDA WHERE NOMBRE = " + "\'" + @nombre + "\'" + ";";
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            dataReader.Read();
            string codigo = dataReader[0].ToString();
            dataReader.Close();
            return codigo;
        }


    }
}
